Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Chris Gaskell 59 posts 142 karma points
    Mar 22, 2010 @ 10:05
    Chris Gaskell
    0

    Update doctype via API

    Hi,

    I have a requirement to add one tab and two fields to each document type in my CMS (there are about 40). Is there anyway I can do this with the API?

    Thanks,

    Chris

  • Lee Kelleher 3945 posts 15163 karma points MVP 10x admin c-trib
    Mar 22, 2010 @ 10:41
    Lee Kelleher
    2

    Hi Chris,

    It's a bit rough-n-ready, here's a quick code sample:

    using umbraco.cms.businesslogic.datatype;
    using umbraco.cms.businesslogic.web;
    using umbraco.cms.businesslogic.propertytype;
    DataTypeDefinition dataType1 = new DataTypeDefinition(1234);
    // DataTypeDefinition dataType2 = new DataTypeDefinition(5678);
    
    List<DocumentType> docTypes = DocumentType.GetAllAsList();
    
    foreach (DocumentType docType in docTypes)
    {
        int tab = docType.AddVirtualTab("New Tab");
    
        docType.AddPropertyType(dataType1, "New_Field_1", "New Field 1");
        docType.AddPropertyType(dataType1, "New_Field_2", "New Field 1");
    
        PropertyType pt1 = docType.getPropertyType("New_Field_1");
        PropertyType pt2 = docType.getPropertyType("New_Field_2");
    
        docType.SetTabOnPropertyType(pt1, tab);
        docType.SetTabOnPropertyType(pt2, tab);
    
        docType.Save();
    }

    First get the data-types for the properties (fields) that you want to add.  Then get a list of all the document-types and loop through them.

    Add the new property-types to the document-type.  Now here's the PITA, the "AddPropertyType" is void, so doesn't return the new property-type, so we need to fetch it back from the database.  Once you've got the new property-types, then you can set which tab they belong to.

    Save the document-type to trigger any associated events/hooks. (You can remove this if you like?)

    I haven't tested this in any way... so use at your own risk! ;-)

    Good luck, Lee.

  • Chris Gaskell 59 posts 142 karma points
    Mar 22, 2010 @ 10:42
    Chris Gaskell
    0

    Cheers Lee, I'll let you know how I get on.

    Chris

  • Chris Gaskell 59 posts 142 karma points
    Mar 23, 2010 @ 10:15
    Chris Gaskell
    1

    Cheers Lee, that worked fine.

    In the end though I didnt add the properties for each doctype - I created a maste doctype and moved all the current doctypes below it.

    Thanks for your help mate.

    Chris

  • Lee Kelleher 3945 posts 15163 karma points MVP 10x admin c-trib
    Mar 23, 2010 @ 10:37
    Lee Kelleher
    0

    Hi Chris,

    You know, I was going to suggest that, (creating a new master doc-type) - but wasn't 100% of any repercussions of doing that! :-)

    Glad it worked ... might do the same on a couple of my client's v3->v4 upgraded installs.

    Cheers, Lee.

  • James Hildeman 92 posts 88 karma points
    Sep 28, 2010 @ 22:05
    James Hildeman
    0

    In your code sample, how did you decide on 1234 in the following?  I need to add a new True/False and was digging through the database to see if I could find a pk (id) that represents True/False.  What am I missing?

    DataTypeDefinition dataType1 = new DataTypeDefinition(1234);

     

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies