Subscribe to Blog Post being Published - Front- & Back-End Development - Front- & Back-End Development - Progress Community
 Front- & Back-End Development

Subscribe to Blog Post being Published

  • Subscribe to Blog Post being Published
  • Goal To grab the URL of a blog post from a specific blog when it has been published.

    Hello, I am new to Sitefinity and have searched Google and the forums and can't quite find a good example or information on what I need to know.

    The closest things I've found so far:
    https://docs.sitefinity.com/for-developers-idataevent
    https://knowledgebase.progress.com/articles/Article/Overwriting-the-default-LifecycleDecorator-for-a-Content-manager
    https://docs.sitefinity.com/for-developers-dynamic-modules-events

    So first question. For my needs, which route should I go between IDataEvent and IDynamicContentUpdatedEvent?

    Second. Should I be subscribed to Updated or Created? I would assume Created only fires once and does not fire again when the post is published (no posts would be created in a published state). If Updated, I can tell if the post is published by checking its status or IsPublished. But how would I differentiate between an update to publish a post and an update to an already published post? I would only want to run the code once when the post is initially published.

    Third. Assuming that the item is of type BlogPost, How can I tell what Blog it belongs to? For example, under Blogs there is Blog1 and Blog2. Would I get this from BlogPost.Parent.Title?

    Fourth. Does BlogPost.ItemDefaultUrl return the canonical url of the post? Is it also full path or just relative?

    Thanks!

    Update 1

    I'm currently trying the IDataEvent route but am hitting a roadblock. Here is the gist so far. I'm also still not seeing a way to determine the answer to question 2.

    void Content_Action(IDataEvent @event)
        
            var action = @event.Action;
            var contentType = @event.ItemType;
            var itemId = @event.ItemId;
            var providerName = @event.ProviderName;
            var manager = ManagerBase.GetMappedManager(contentType, providerName);
            var item = manager.GetItemOrDefault(contentType, itemId);
            var blogType = TypeResolutionService.ResolveType("Telerik.Sitefinity.Blogs.Model.BlogPost");
            if (item.GetType().FullName == blogType.FullName && action.ToLower() == "updated") //Blog post that has been updated
             //Working up to this point
                //BlogPost post = (BlogPost)item; //Doesn't seem to work
                BlogsManager blogManager = BlogsManager.GetManager();
                BlogPost post = blogManager.GetBlogPost(itemId); //This doesn't seem to work either
                if (post != null)
                 //Not getting in here
                    if (post.Status == ContentLifecycleStatus.Live && post.Parent.Title.ToLower() == "blog1") //blog1 post that is published
                    
                        string url = post.ItemDefaultUrl;
                        using (WebClient client = new WebClient())
                        
                            var parm = new System.Collections.Specialized.NameValueCollection();
                            parm.Add("URL", url);
                            client.UploadValues("--------------", "POST", parm);
                        
                    
                
            
        
  • Solved

    After trial and error, I've figured out the parameters that are only true when a blog post has initially been published. Also, the item was not null and the problem causing the code to not execute was unrelated. These are what to check for:

    action == "New"
    item.ApprovalWorkflowState == "Published"
    item.Status == ContentLifecycleStatus.Live
    item.Visible == true

    Those are the parameters that will only exist the first time an unpublished post is published, with the kicker being the action being "New" and not "Updated".