Quantcast
Channel: Microsoft Identity Manager forum
Viewing all articles
Browse latest Browse all 7443

XPathFilter is null while generating UniqueAccountName

$
0
0

Hi,

I am trying to generate unique AccountName via WF and having issues in EnumeratedResourceActivity. Eventhough I set up XPathFilter property the error message says the filter is empty(or not set). Here is the visual of my WF.

So when a user is created with email let's say xyz@google.com I am trying to add AccountName to the user request here. If the user name is already present in portal I am appending 1 then 2 then 3 and so on.

here is my logic

        public const string WF_ACTOR_GUID = "3f862651-ebee-4cf8-a824-0c9663757aCC";
        public int loopCounter = 1;
        public bool loopAgain = true;
        public string _accountName;
        public string _email;

        public AddUniqueAccountName()
        {
            InitializeComponent();
        }


        public string AccountName
        {
            get { return _accountName; }
            set { _accountName = value; }
        }

        public string Email
        {
            get { return _email; }
            set { _email = value; }
        }


        private void InitializeReadResource_ExecuteCode(object sender, EventArgs e)
        {
            this.readResourceActivity1.ActorId = new System.Guid(WF_ACTOR_GUID);
            this.readResourceActivity1.ResourceId = this.CurrentRequestActivity1_CurrentRequest1.Target.GetGuid();
        }


        private void GenerateUniqueAccountName_ExecuteCode(object sender, EventArgs e)
        {
            this.readResourceActivity1.SelectionAttributes = new string[] { "AccountName", "Email" };
            ResourceType user = readResourceActivity1.Resource;
            this.Email = (string)user["Email"];
            this.AccountName = getAccountName();
        }

        private void InitializeEnumerateResource_ExecuteCode(object sender, EventArgs e)
        {
            this.enumerateResourcesActivity1.ActorId = new System.Guid(WF_ACTOR_GUID);
            String resourceType = this.readResourceActivity1_Resource1["ObjectType"].ToString();
            this.enumerateResourcesActivity1.Selection = new string[] { "AccountName" };
            this.enumerateResourcesActivity1.XPathFilter = "/" + resourceType + "[AccountName =\'" + this.AccountName + "\']"; // /Person[AccountName='patelb']

        }

        private void CheckUniqueness_ExecuteCode(object sender, EventArgs e)
        {
            int totalcount = this.enumerateResourcesActivity1.TotalResultsCount;
            ResourceType results = EnumerateResourcesActivity.GetCurrentIterationItem((CodeActivity)sender) as ResourceType;
            if (totalcount > 0)
            {
                this.AccountName = this.AccountName + loopCounter.ToString();
                this.loopAgain = true;
            }
            else
                this.loopAgain = false;
        }


        private void InitializeUpdateTarget_ExecuteCode(object sender, EventArgs e)
        {
            this.UpdateResourceActivity1.UpdateParameters = new UpdateRequestParameter[1];
            this.UpdateResourceActivity1.UpdateParameters[0] = new UpdateRequestParameter("AccountName", UpdateMode.Modify, this.AccountName);
            this.UpdateResourceActivity1.ActorId = new System.Guid(WF_ACTOR_GUID);
            this.UpdateResourceActivity1.ResourceId = this.CurrentRequestActivity1_CurrentRequest1.Target.GetGuid(); //new System.Guid("3b072ae5-8e8d-423c-ae85-af5d33869f94"); //
        }

        private void ThrowError_ExecuteCode(object sender, EventArgs e)
        {
            throw new WorkflowTerminatedException("No unique value found");
        }

Here is deginer code...

    public partial class AddUniqueAccountName
    {
        #region Designer generated code

        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCode]
        [System.CodeDom.Compiler.GeneratedCode("", "")]
        private void InitializeComponent()
        {
            this.CanModifyActivities = true;
            System.Workflow.Activities.Rules.RuleConditionReference ruleconditionreference1 = new System.Workflow.Activities.Rules.RuleConditionReference();
            System.Workflow.Activities.Rules.RuleConditionReference ruleconditionreference2 = new System.Workflow.Activities.Rules.RuleConditionReference();
            System.Workflow.Activities.Rules.RuleConditionReference ruleconditionreference3 = new System.Workflow.Activities.Rules.RuleConditionReference();
            System.Workflow.ComponentModel.ActivityBind activitybind1 = new System.Workflow.ComponentModel.ActivityBind();
            System.Workflow.ComponentModel.ActivityBind activitybind2 = new System.Workflow.ComponentModel.ActivityBind();
            this.CheckUniqueness = new System.Workflow.Activities.CodeActivity();
            this.ThrowError = new System.Workflow.Activities.CodeActivity();
            this.UpdateResourceActivity1 = new Microsoft.ResourceManagement.Workflow.Activities.UpdateResourceActivity();
            this.InitializeUpdateTarget = new System.Workflow.Activities.CodeActivity();
            this.enumerateResourcesActivity1 = new Microsoft.ResourceManagement.Workflow.Activities.EnumerateResourcesActivity();
            this.InitializeEnumerateResource = new System.Workflow.Activities.CodeActivity();
            this.ifAccountNameNotFound = new System.Workflow.Activities.IfElseBranchActivity();
            this.ifAccountNameFound = new System.Workflow.Activities.IfElseBranchActivity();
            this.sequenceActivity1 = new System.Workflow.Activities.SequenceActivity();
            this.ifElseActivity1 = new System.Workflow.Activities.IfElseActivity();
            this.whileActivity1 = new System.Workflow.Activities.WhileActivity();
            this.GenerateUniqueAccountName = new System.Workflow.Activities.CodeActivity();
            this.readResourceActivity1 = new Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity();
            this.InitializeReadResource = new System.Workflow.Activities.CodeActivity();
            this.CurrentRequestActivity1 = new Microsoft.ResourceManagement.Workflow.Activities.CurrentRequestActivity();
            // 
            // CheckUniqueness
            // 
            this.CheckUniqueness.Name = "CheckUniqueness";
            this.CheckUniqueness.ExecuteCode += new System.EventHandler(this.CheckUniqueness_ExecuteCode);
            // 
            // ThrowError
            // 
            this.ThrowError.Name = "ThrowError";
            this.ThrowError.ExecuteCode += new System.EventHandler(this.ThrowError_ExecuteCode);
            // 
            // UpdateResourceActivity1
            // 
            this.UpdateResourceActivity1.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
            this.UpdateResourceActivity1.Name = "UpdateResourceActivity1";
            this.UpdateResourceActivity1.ResourceId = new System.Guid("00000000-0000-0000-0000-000000000000");
            this.UpdateResourceActivity1.UpdateParameters = new Microsoft.ResourceManagement.WebServices.WSResourceManagement.UpdateRequestParameter[0];
            // 
            // InitializeUpdateTarget
            // 
            this.InitializeUpdateTarget.Name = "InitializeUpdateTarget";
            this.InitializeUpdateTarget.ExecuteCode += new System.EventHandler(this.InitializeUpdateTarget_ExecuteCode);
            // 
            // enumerateResourcesActivity1
            // 
            this.enumerateResourcesActivity1.Activities.Add(this.CheckUniqueness);
            this.enumerateResourcesActivity1.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
            this.enumerateResourcesActivity1.Name = "enumerateResourcesActivity1";
            this.enumerateResourcesActivity1.PageSize = 100;
            this.enumerateResourcesActivity1.Selection = null;
            this.enumerateResourcesActivity1.SortingAttributes = null;
            this.enumerateResourcesActivity1.TotalResultsCount = 0;
            this.enumerateResourcesActivity1.XPathFilter = null;
            // 
            // InitializeEnumerateResource
            // 
            this.InitializeEnumerateResource.Name = "InitializeEnumerateResource";
            this.InitializeEnumerateResource.ExecuteCode += new System.EventHandler(this.InitializeEnumerateResource_ExecuteCode);
            // 
            // ifAccountNameNotFound
            // 
            this.ifAccountNameNotFound.Activities.Add(this.ThrowError);
            ruleconditionreference1.ConditionName = "AccountNotFound";
            this.ifAccountNameNotFound.Condition = ruleconditionreference1;
            this.ifAccountNameNotFound.Name = "ifAccountNameNotFound";
            // 
            // ifAccountNameFound
            // 
            this.ifAccountNameFound.Activities.Add(this.InitializeUpdateTarget);
            this.ifAccountNameFound.Activities.Add(this.UpdateResourceActivity1);
            ruleconditionreference2.ConditionName = "AccountFound";
            this.ifAccountNameFound.Condition = ruleconditionreference2;
            this.ifAccountNameFound.Name = "ifAccountNameFound";
            // 
            // sequenceActivity1
            // 
            this.sequenceActivity1.Activities.Add(this.InitializeEnumerateResource);
            this.sequenceActivity1.Activities.Add(this.enumerateResourcesActivity1);
            this.sequenceActivity1.Name = "sequenceActivity1";
            // 
            // ifElseActivity1
            // 
            this.ifElseActivity1.Activities.Add(this.ifAccountNameFound);
            this.ifElseActivity1.Activities.Add(this.ifAccountNameNotFound);
            this.ifElseActivity1.Name = "ifElseActivity1";
            // 
            // whileActivity1
            // 
            this.whileActivity1.Activities.Add(this.sequenceActivity1);
            ruleconditionreference3.ConditionName = "LoopAgain";
            this.whileActivity1.Condition = ruleconditionreference3;
            this.whileActivity1.Name = "whileActivity1";
            // 
            // GenerateUniqueAccountName
            // 
            this.GenerateUniqueAccountName.Name = "GenerateUniqueAccountName";
            this.GenerateUniqueAccountName.ExecuteCode += new System.EventHandler(this.GenerateUniqueAccountName_ExecuteCode);
            // 
            // readResourceActivity1
            // 
            this.readResourceActivity1.ActorId = new System.Guid("00000000-0000-0000-0000-000000000000");
            this.readResourceActivity1.Name = "readResourceActivity1";
            activitybind1.Name = "AddUniqueAccountName";
            activitybind1.Path = "readResourceActivity1_Resource1";
            this.readResourceActivity1.ResourceId = new System.Guid("00000000-0000-0000-0000-000000000000");
            this.readResourceActivity1.SelectionAttributes = null;
            this.readResourceActivity1.SetBinding(Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity.ResourceProperty, ((System.Workflow.ComponentModel.ActivityBind)(activitybind1)));
            // 
            // InitializeReadResource
            // 
            this.InitializeReadResource.Name = "InitializeReadResource";
            this.InitializeReadResource.ExecuteCode += new System.EventHandler(this.InitializeReadResource_ExecuteCode);
            // 
            // CurrentRequestActivity1
            // 
            activitybind2.Name = "AddUniqueAccountName";
            activitybind2.Path = "CurrentRequestActivity1_CurrentRequest1";
            this.CurrentRequestActivity1.Name = "CurrentRequestActivity1";
            this.CurrentRequestActivity1.SetBinding(Microsoft.ResourceManagement.Workflow.Activities.CurrentRequestActivity.CurrentRequestProperty, ((System.Workflow.ComponentModel.ActivityBind)(activitybind2)));
            // 
            // AddUniqueAccountName
            // 
            this.Activities.Add(this.CurrentRequestActivity1);
            this.Activities.Add(this.InitializeReadResource);
            this.Activities.Add(this.readResourceActivity1);
            this.Activities.Add(this.GenerateUniqueAccountName);
            this.Activities.Add(this.whileActivity1);
            this.Activities.Add(this.ifElseActivity1);
            this.Name = "AddUniqueAccountName";
            this.CanModifyActivities = false;

        }

        #endregion

        private SequenceActivity sequenceActivity1;

        private WhileActivity whileActivity1;

        private CodeActivity CheckUniqueness;

        private Microsoft.ResourceManagement.Workflow.Activities.EnumerateResourcesActivity enumerateResourcesActivity1;

        private CodeActivity InitializeEnumerateResource;

        private CodeActivity InitializeReadResource;

        private Microsoft.ResourceManagement.Workflow.Activities.ReadResourceActivity readResourceActivity1;

        private CodeActivity InitializeUpdateTarget;

        private IfElseBranchActivity ifAccountNameNotFound;

        private IfElseBranchActivity ifAccountNameFound;

        private IfElseActivity ifElseActivity1;

        private CodeActivity ThrowError;

        private CodeActivity GenerateUniqueAccountName;

        private Microsoft.ResourceManagement.Workflow.Activities.UpdateResourceActivity UpdateResourceActivity1;

        private Microsoft.ResourceManagement.Workflow.Activities.CurrentRequestActivity CurrentRequestActivity1;

    }

I am NOT sure what I am doing wrong here. I also read when you use EnumerateResource you may not want to use while loop but I am not sure how we can enumerate results once you get from EnumerateResourceActivity.

I would really appreciate you if you suggest any solution/better approach to this.

Thanks,

Bhavesh Patel




Viewing all articles
Browse latest Browse all 7443

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>