4 Replies Latest reply on Nov 21, 2016 8:24 AM by garambasic RSS
    garambasic Newbie

    AddPropertyDefinition in Extension SDK

    hello,

     

    can someone help out with this method?

     

    Id like to add a simple Property to my ThingShape from my extension-created service

    I'm using AddPropertyDefinition on my thingShape object like this:

     

    thingShapeObject.AddPropertyDefinition(name,[...]);

     

    but i keep getting the message

    Unable to Invoke testService on testThing: Cannot cast java.lang.String to com.thingworx.thingshape.ThingShape

     

    no matter what i do

     

    Can anyone provide an working example?

    Only need to set the Name parameter and type parameter to String. Should be totally enough, or do i need to set all parameters?

      • Re: AddPropertyDefinition in Extension SDK
        ttielebein Collaborator

        Can you provide the full line of code? What type of parameters are you passing into the method?

          • Re: AddPropertyDefinition in Extension SDK
            garambasic Newbie

            yea, the code is below.

            basically i'm creating an infotable and trying to set properties on the passed thingshape-parameter from the infotable-values.

            my guess is that i got the parameters wrong on this one:

             

            thingshape.AddPropertyDefinition(propName, null, "STRING", null, null, null, true, null, null, null, null, null, null, null, null, null);

             

             

             

             

            complete Code:

             

            public class testThing extends Thing {

             

             

              @ThingworxServiceDefinition(name = "setProperties", description = "set properties of thingshape")

             

             

              public void setProperties(

             

            @ThingworxServiceParameter(name = "thingshape", description = "thingshape to set", baseType = "THINGSHAPENAME") ThingShape thingshape)

              throws Exception

              {

             

             

              DataShapeDefinition AV = new DataShapeDefinition();

              AV.addFieldDefinition(new FieldDefinition("Attribute", BaseTypes.STRING));

              AV.addFieldDefinition(new FieldDefinition("Value", BaseTypes.STRING));

              InfoTable infoTab = new InfoTable();

              infoTab.setDataShape(AV);

              ValueCollection valColl = new ValueCollection();

              valColl.put("Attribute", BaseTypes.ConvertToPrimitive("test", BaseTypes.STRING));

              valColl.put("Value", BaseTypes.ConvertToPrimitive("testValue", BaseTypes.STRING));

              infoTab.addRow(valColl);

              ValueCollectionList valCollList = infoTab.getRows();

             

              for (ValueCollection infoVal : valCollList) {

             

             

              String propName = infoVal.getStringValue("Attribute");

             

             

              thingshape.AddPropertyDefinition(propName, null, "STRING", null, null, null, true, null, null, null, null, null, null, null, null, null);

             

            }}}

              • Re: AddPropertyDefinition in Extension SDK
                Ankit Gupta Ninja

                @garambasic,

                 

                Try something like:

                @ThingworxBaseTemplateDefinition(name = "GenericThing")

                public class testThing extends Thing {

                 

                    private static Logger _logger = LogUtilities.getInstance().getApplicationLogger(testThing.class);

                 

                    public testThing() {

                        // TODO Auto-generated constructor stub

                    }

                 

                    @ThingworxServiceDefinition(name = "setProperties", description = "", category = "", isAllowOverride = false, aspects = {

                            "isAsync:false" })

                    @ThingworxServiceResult(name = "Result", description = "", baseType = "NOTHING", aspects = {})

                    public void setProperties(

                            @ThingworxServiceParameter(name = "thingshape", description = "thingshape to set", baseType = "THINGSHAPENAME") String thingshape) {

                        _logger.trace("Entering Service: setProperties");

                        ThingShape ThingShapeObject = (ThingShape) EntityUtilities.findEntity(thingshape, ThingworxRelationshipTypes.ThingShape);

                        ThingShapeObject.AddPropertyDefinition(name, description, type, category, dataShape, readOnly, persistent, logged, dataChangeType, dataChangeThreshold, remote, remotePropertyName, timeout, pushType, pushThreshold, defaultValue);

                        _logger.trace("Exiting Service: setProperties");

                    }

                 

                }

                  • Re: AddPropertyDefinition in Extension SDK
                    garambasic Newbie

                    hey Ankit,

                     

                    thank you so much! It works now.

                    For future reference:

                    you have to provide some of the parameters though. not enough to set everything you dont need to null. this worked for me:

                    ThingShapeObject.AddPropertyDefinition("name", "", "STRING", "", null, false, true, true, "VALUE", null, false, null, null, "", null, null);