guidewiregosu

Usage of implementsInterface element on entities in guidewire


I would like to know why do we use implementsInterface element in entities. I know one example where they use it to make it as assignable entity. But I could not understand what other purpose and how/why it is being used in entities.

Example: Injuryincident entity has claimantsupplier and coveragesupplier interface


Solution

  • I like to see it from this prespective, simplified and assuming that you have some java background:

    As you probably already know it, having an entity means in the end of the day, having a Java class... Well, by using the implementsInterface element in your entity, is similar to implement an interface in you java class.

    Here you have a quick example...

    Consider the following:

    MyEntiti.eti

    <?xml version="1.0"?>
    <entity
      xmlns="http://guidewire.com/datamodel"
      entity="MyEntity"
      table="myentity"
      type="retireable"/>
    

    AnInterface.gs

    package mypkg
    interface AnInterface {
      function doSomething()
    }
    

    AnInterfaceImpl.gs

    package mypkg
    
    class AnInterfaceImpl implements AnInterface {
      override function doSomething() {
        print("Hello!")
      }
    }
    

    Image that you need MyEntity to have the ability of "doSomething", you just need to add the implementsInterface:

    <?xml version="1.0"?>
    <entity
      xmlns="http://guidewire.com/datamodel"
      entity="MyEntity"
      table="myentity"
      type="retireable">
      <implementsInterface
        iface="mypkg.AnInterface"
        impl="mypkg.AnInterfaceImpl"/>
    </entity>
    

    By doing that, the following code must work:

    var myEntity = new MyEntity()
    myEntity.doSomething() //this will call the  method defined in the interface-implementation
    

    And even better, you migth let you implementation to recognize the related object of MyEntity and use it as per your needs:

    package mypkg
    
    class AnInterfaceImpl implements AnInterface {
      
      private final var  _relatedEntity : MyEntity
    
      construct(relatedTo : MyEntity) {
        _relatedEntity = relatedTo 
      }
    
      override function doSomething() {
        var createUser = _relatedEntity.CreateUser // you can accees to whatever you need
        print("Hello!, this is the related instace of MyEntity: ${_relatedEntity}")
      }
    }
    

    Hope it helps, regards!