Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

Here is what I have

  1. A custom activity with 2 in parameters and 2 out parameters.

  2. The custom activity code works fine and in debugging mode the parameter is set.

  3. I created some log activities, after the activity runs, to see if the output parameters are being set, but they are always empty. enter image description here

  4. I attached a screenshot and also the code

    code of the customactivity

    public partial class CreateDocumentLibrary : SequenceActivity {

        public CreateDocumentLibrary()
        {
            InitializeComponent();
        }
    
        public static DependencyProperty SiteUrlProperty = DependencyProperty.Register("SiteUrl",typeof(string), typeof(CreateDocumentLibrary), new PropertyMetadata(""));
    
        [DescriptionAttribute("Url of site where document library is to be created")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        [ValidationOption(ValidationOption.Optional)]
        public string SiteUrl
        {
            get
            {
                return ((string)(base.GetValue(SiteUrlProperty)));
            }
            set
            {
                base.SetValue(SiteUrlProperty, value);
            }
        }
    
        public static DependencyProperty DocumentLibraryNameProperty = DependencyProperty.Register("DocumentLibraryName",typeof(string), typeof(CreateDocumentLibrary), new PropertyMetadata(""));
    
        [DescriptionAttribute("Name for DocumentLibrary")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        [ValidationOption(ValidationOption.Optional)]
        public string DocumentLibraryName
        {
            get
            {
                return ((string)(base.GetValue(DocumentLibraryNameProperty)));
            }
            set
            {
                base.SetValue(DocumentLibraryNameProperty, value);
            }
        }
    
        public static DependencyProperty DocumentLibraryResultNameProperty = DependencyProperty.Register("DocumentLibraryResultName", typeof(string), typeof(CreateDocumentLibrary), new PropertyMetadata(""));
    
        [DescriptionAttribute("Result  Name for DocumentLibrary")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        [ValidationOption(ValidationOption.Optional)]
        public string DocumentLibraryResultName
        {
            get
            {
                return ((string)(base.GetValue(DocumentLibraryResultNameProperty)));
            }
            set
            {
                base.SetValue(DocumentLibraryResultNameProperty, value);
            }
        }
    
    
        public static DependencyProperty DocumentLibraryLinkProperty = DependencyProperty.Register("DocumentLibraryLink", typeof(string), typeof(CreateDocumentLibrary), new PropertyMetadata(""));
    
        [DescriptionAttribute("Link for DocumentLibrary")]
        [BrowsableAttribute(true)]
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)]
        [ValidationOption(ValidationOption.Optional)]
        public string DocumentLibraryLink
        {
            get
            {
                return ((string)(base.GetValue(DocumentLibraryLinkProperty)));
            }
            set
            {
                base.SetValue(DocumentLibraryLinkProperty, value);
            }
        }
    
    
        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            CreateDocLibrary();
            return ActivityExecutionStatus.Closed;
        }
    
        /// <summary>
        /// Checks if the list exists in the spweb object
        /// </summary>
        /// <param name="docLibName">Document Library name</param>
        /// <param name="web">SPWeb</param>
        /// <returns>Returns true if it exists</returns>
        bool listExists(string docLibName, SPWeb web)
        {
            try
            {
                //if there is no list with such name, it will throw an exception
                return (web.Lists[docLibName] != null);
            }
            catch
            {
                return false;
            }
        }
    
        /// <summary>
        /// Creates a document library with the name passed
        /// </summary>
        private void CreateDocLibrary()
        {
            try
            {
                using (SPSite oSPSite = new SPSite(SiteUrl))
                {
                    using (SPWeb oSPWeb = oSPSite.RootWeb)
                    {
                        string docLibNameBase = DocumentLibraryName;
                        string docLibNameTemp = docLibNameBase;
                        int iCounter = 1;
                        while (listExists(docLibNameTemp, oSPWeb))
                        {
                            docLibNameTemp = docLibNameBase + "(" + iCounter.ToString() + ")";
                            iCounter++;
                        }
    
                        SPList oSPList = oSPWeb.Lists.TryGetList(docLibNameTemp);
                        if (oSPList == null)
                        {
                            Guid ID = oSPWeb.Lists.Add(docLibNameTemp, docLibNameTemp, SPListTemplateType.DocumentLibrary);
                            DocumentLibraryResultName = docLibNameTemp;
                            oSPList = oSPWeb.Lists[ID];
                            DocumentLibraryLink = SPUtility.ConcatUrls(oSPWeb.Url, oSPList.Views["All Documents"].Url);
                            oSPList.OnQuickLaunch = false;
                            oSPList.Update();
                        }                        
                    }
                }
            }
            catch (Exception)
            {                
                throw;
            }           
        }
    }   
    

code of the actions.actions

<Action Name="Create Doc Library" ClassName="MyCompany.CustomActivities.CreateDocumentLibrary"
        Assembly="MyCompany.CustomActivities, Version=1.0.0.0,Culture=neutral, PublicKeyToken=207090b9b3f674c8"
        AppliesTo="all" Category="MyCompany custom activities">

      <RuleDesigner Sentence="Create document library: %1 in site: %2. (Save link in: %3, save document library name in: %4)">
        <FieldBind Field="DocumentLibraryName" Text="Document List Name" DesignerType="TextArea" Id="1"/>
        <FieldBind Field="SiteUrl" Text="Url of base site" Id="2" DesignerType="TextArea"/>
        <FieldBind Field="DocumentLibraryLink" Text="Link to the document library" Id="3" DesignerType="TextArea"/>
        <FieldBind Field="DocumentLibraryResultName" Text="Result name of to the document library" Id="4" DesignerType="TextArea"/>

      </RuleDesigner>

      <Parameters>
        <Parameter Name="DocumentLibraryName" Type="System.String, mscorlib" Direction="In" />
        <Parameter Name="SiteUrl" Type="System.String, mscorlib" Direction="In" />
        <Parameter Name="DocumentLibraryLink" Type="System.String, mscorlib" Direction="Out" />
        <Parameter Name="DocumentLibraryResultName" Type="System.String, mscorlib" Direction="Out" />

      </Parameters>

    </Action>
share|improve this question

1 Answer 1

up vote 1 down vote accepted

The problem is with your DesignerType attributes in your ACTIONS files. Since you want to set these to variables you should switch these lines:

<FieldBind Field="DocumentLibraryLink" Text="Link to the document library" Id="3" DesignerType="TextArea"/>
<FieldBind Field="DocumentLibraryResultName" Text="Result name of to the document library" Id="4" DesignerType="TextArea"/>

To this:

<FieldBind Field="DocumentLibraryLink" Text="Link to the document library" Id="3" DesignerType="ParameterNames"/>
<FieldBind Field="DocumentLibraryResultName" Text="Result name of to the document library" Id="4" DesignerType="ParameterNames"/>

The key difference being that the DesignerType has been set to ParameterNames which allows you to specify which variable to save the output into.

Documentation: http://msdn.microsoft.com/en-us/library/bb897971(v=office.14).aspx

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.