public List <OrgUnitRegWrapper> Read(string antal, string offset)
        {
            FremsoegObjekthierarkiInputType input = new FremsoegObjekthierarkiInputType();

            input.MaksimalAntalKvantitet   = antal;
            input.FoersteResultatReference = offset;

            fremsoegobjekthierarkiRequest request = new fremsoegobjekthierarkiRequest();

            request.FremsoegobjekthierarkiRequest1 = new FremsoegobjekthierarkiRequestType();
            request.FremsoegobjekthierarkiRequest1.FremsoegObjekthierarkiInput      = input;
            request.FremsoegobjekthierarkiRequest1.AuthorityContext                 = new AuthorityContextType();
            request.FremsoegobjekthierarkiRequest1.AuthorityContext.MunicipalityCVR = OrganisationRegistryProperties.GetMunicipality();

            // send request
            OrganisationSystemPortType channel = StubUtil.CreateChannel <OrganisationSystemPortType>(OrganisationSystemStubHelper.SERVICE, "FremsoegObjektHierarki", helper.CreatePort());

            try
            {
                var result = channel.fremsoegobjekthierarki(request);

                int statusCode = Int32.Parse(result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.StandardRetur.StatusKode);
                if (statusCode != 20)
                {
                    string message = StubUtil.ConstructSoapErrorMessage(statusCode, "FremsoegObjektHierarki", OrganisationFunktionStubHelper.SERVICE, result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.StandardRetur.FejlbeskedTekst);
                    log.Error(message);
                    throw new SoapServiceException(message);
                }


                List <OrgUnitRegWrapper> registrations = new List <OrgUnitRegWrapper>();

                var ous = result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.OrganisationEnheder;
                foreach (var ou in ous)
                {
                    string uuid = ou.ObjektType?.UUIDIdentifikator;

                    if (uuid == null)
                    {
                        log.Warn("OU in hierarchy does not have a uuid");
                    }
                    else if (ou.Registrering == null)
                    {
                        log.Warn("OU in hierarchy does not have a registration: " + uuid);
                    }
                    else
                    {
                        if (ou.Registrering.Length != 1)
                        {
                            log.Warn("OU in hierarchy does has more than one registration: " + uuid);
                        }

                        registrations.Add(new OrgUnitRegWrapper()
                        {
                            Uuid         = uuid,
                            Registration = ou.Registrering[0]
                        });
                    }
                }

                return(registrations);
            }
            catch (Exception ex) when(ex is CommunicationException || ex is IOException || ex is TimeoutException || ex is WebException)
            {
                throw new ServiceNotFoundException("Failed to establish connection to the Importer service on OrganisationFunktion", ex);
            }
        }
        public List <OrgUnitRegWrapper> Read(string antal, string offset, out Boolean moreData)
        {
            moreData = false; // initialize to no-more-data

            FremsoegObjekthierarkiInputType input = new FremsoegObjekthierarkiInputType();

            input.MaksimalAntalKvantitet   = antal;
            input.FoersteResultatReference = offset;

            fremsoegobjekthierarkiRequest request = new fremsoegobjekthierarkiRequest();

            request.FremsoegobjekthierarkiRequest1 = new FremsoegobjekthierarkiRequestType();
            request.FremsoegobjekthierarkiRequest1.FremsoegObjekthierarkiInput      = input;
            request.FremsoegobjekthierarkiRequest1.AuthorityContext                 = new AuthorityContextType();
            request.FremsoegobjekthierarkiRequest1.AuthorityContext.MunicipalityCVR = OrganisationRegistryProperties.GetCurrentMunicipality();

            // send request
            OrganisationSystemPortType channel = StubUtil.CreateChannel <OrganisationSystemPortType>(OrganisationSystemStubHelper.SERVICE, "FremsoegObjektHierarki", helper.CreatePort());

            try
            {
                var result = channel.fremsoegobjekthierarki(request);

                int statusCode = Int32.Parse(result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.StandardRetur.StatusKode);
                if (statusCode != 20)
                {
                    string message = StubUtil.ConstructSoapErrorMessage(statusCode, "FremsoegObjektHierarki", OrganisationSystemStubHelper.SERVICE, result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.StandardRetur.FejlbeskedTekst);
                    log.Error(message);
                    throw new SoapServiceException(message);
                }

                var output = result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput;
                if (log.IsDebugEnabled)
                {
                    log.Debug("Found: " + output.OrganisationEnheder.Length + " Enheder, " +
                              output.Interessefaellesskaber.Length + " Interessefaellesskaber, " +
                              output.ItSystemer.Length + " ItSystemer, " +
                              output.Organisationer.Length + " Organisationer, " +
                              output.OrganisationFunktioner.Length + " OrganisationFunktioner");
                }

                if (output.OrganisationEnheder.Length > 0)
                {
                    moreData = true;
                }

                List <OrgUnitRegWrapper> registrations = new List <OrgUnitRegWrapper>();

                var ous = result.FremsoegobjekthierarkiResponse1.FremsoegObjekthierarkiOutput.OrganisationEnheder;
                foreach (var ou in ous)
                {
                    string uuid = ou.ObjektType?.UUIDIdentifikator;

                    if (uuid == null)
                    {
                        log.Warn("OU in hierarchy does not have a uuid");
                    }
                    else if (ou.Registrering == null)
                    {
                        log.Warn("OU in hierarchy does not have a registration: " + uuid);
                    }
                    else
                    {
                        if (ou.Registrering.Length != 1)
                        {
                            log.Warn("OU in hierarchy does has more than one registration: " + uuid);
                        }

                        var reg = ou.Registrering[0];

                        if (StubUtil.GetMunicipalityOrganisationUUID().Equals(reg.RelationListe?.Tilhoerer?.ReferenceID?.Item))
                        {
                            registrations.Add(new OrgUnitRegWrapper()
                            {
                                Uuid         = uuid,
                                Registration = reg
                            });
                        }
                        else
                        {
                            log.Warn("Skipping OrgUnit with Tilhoerer relation unknown Organisation: " + reg.RelationListe?.Tilhoerer?.ReferenceID?.Item);
                        }
                    }
                }

                return(registrations);
            }
            catch (Exception ex) when(ex is CommunicationException || ex is IOException || ex is TimeoutException || ex is WebException)
            {
                throw new ServiceNotFoundException("Failed to establish connection to the Importer service on OrganisationSystem", ex);
            }
        }