More in this section
Forums / Developing with Sitefinity / Subscribe to Blog Post being Published

Subscribe to Blog Post being Published

The forums are in read-only mode. In case that you want to directly contact the Progress Sitefinity team use the support center. In our Google Plus group you can find more than one thousand Sitefinity developers discussing different topics. For the Stack Overflow threads don’t forget to use the “Sitefinity” tag.
2 posts, 1 answered
  1. Troy
    Troy avatar
    0 posts
    Registered:
    16 Nov 2017
    16 Nov 2017
    Link to this post

    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);
                        }
                    }
                }
            }
        }
    Answered
  2. Troy
    Troy avatar
    0 posts
    Registered:
    16 Nov 2017
    21 Nov 2017 in reply to Troy
    Link to this post

    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".

     

2 posts, 1 answered