| 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' } | 
| } |