Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SynchronizeExtensionTypes (Lib3DS_Entities entities) as owning Lib3DS_ExtensionTypes 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    extensions := selectuniquevalues( entities, Elements.Extensions, extension, 
 | 
                                      isnull( extension.ExtensionType() ), 
 | 
                                      extension.Type() ); 
 | 
     
 | 
    traverse( extensions, Elements, extension ) 
 | 
    { 
 | 
      entity := select( entities, Elements, entity, 
 | 
                        exists( entity, Extensions, ext, ext.Type() = extension ) ); 
 | 
     
 | 
      if( not isnull( entity ) ) 
 | 
      { 
 | 
        path := ''; 
 | 
        if( entity.Kind() = Lib3DS_EntityKind::Object() ) 
 | 
        { 
 | 
          path := path + 'bus'; 
 | 
        } 
 | 
        else if( entity.Kind() = Lib3DS_EntityKind::Relation() ) 
 | 
        { 
 | 
          path := path + 'rel'; 
 | 
        } 
 | 
         
 | 
        extensionUrl := URL::Encode( extension ); 
 | 
        querystring := 'select=interface%5B' + extensionUrl + '%5D.name&select=interface%5B' + extensionUrl + '%5D.allparents'; 
 | 
        path := path + '?' + querystring; 
 | 
         
 | 
        nvtrequest := LibInt_MessageAccessor::CreateEmptyMessage(); 
 | 
        LibInt_MessageAccessor::SetHeaderProperty( nvtrequest, '_QI.ContentType', 'RAW' ); 
 | 
        LibInt_MessageAccessor::SetHeaderProperty( nvtrequest, 'HttpEndpointMethod', 'GET' ); 
 | 
        LibInt_MessageAccessor::SetHeaderProperty( nvtrequest, 'HttpEndpointPath', path ); 
 | 
        LibInt_MessageAccessor::SetHeaderProperty( nvtrequest, 'HTTPHeader.Accept', 'application/json' ); 
 | 
         
 | 
        nvtresponse := LibInt_IntegratorProxy::SyncNvtRequest( this.Root().IntegratorID(), '', nvtrequest ); 
 | 
        response := LibInt_MessageAccessor::GetBodyValueAsString( nvtresponse ); 
 | 
         
 | 
        jsonresponse := JSON::Parse( response ); 
 | 
         
 | 
        if( not isnull( jsonresponse ) ) 
 | 
        { 
 | 
          this.Root().ParseExtensionTypeQuery( jsonresponse ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    Transaction::Transaction().Propagate( relation( Lib3DS_Extension, ExtensionType ) ); 
 | 
     
 | 
    extensiontypes := selectset( entities, Elements.Extensions.ExtensionType, extensiontype, true ); 
 | 
     
 | 
    return &extensiontypes; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |