Problemen bij implementeren schema's v1.1 in C#.NET

Dit is een statische kopie van het eerdere discussie.kinggemeenten.nl.
Nieuwe discussies kunnen in de GitHub repository 'StUF standaarden' als issue worden opgevoerd.

2 reacties / 0 nieuw
Björn Molenmaker
Problemen bij implementeren schema's v1.1 in C#.NET


Wij zijn begonnen met het implementeren van de Zaak- en Documentservices 1.1. 
Onze aanpak is c# classes genereren vanuit de WSDL met behulp van Visual Studio en het toevoegen van een Service reference daar. Dat gaat goed en er wordt succesvol code gegenereerd. Echter zodra we die code willen gaan gebruiken lopen we tegen problemen aan.
Bij het maken van een Lk01 bericht voor de CreeerZaak lopen we tegen de volgende punten aan.
Het ParametersLk01 element heeft een element indicatorOvername. Als volgt gedefinieerd in de XSD:


<complexType name="ParametersKennisgeving">
    <sequence>
      <element minOccurs="0" name="mutatiesoort" type="StUF:Mutatiesoort" />
      <element minOccurs="0" default="V" name="indicatorOvername" type="StUF:IndicatorOvername" />
    </sequence>
  </complexType>
  <complexType name="ParametersLk01">
    <complexContent mixed="false">
      <restriction base="StUF:ParametersKennisgeving">
        <sequence>
          <element name="mutatiesoort" type="StUF:Mutatiesoort" />
          <element default="V" name="indicatorOvername" type="StUF:IndicatorOvername" />
        </sequence>
      </restriction>
    </complexContent>
  </complexType>


ParametersKennisgeving heeft dus een minOccurs van 0 en een default van "V" terwijl de afgeleide ParametersLk01 alleen een default heeft van "V". 
De gegenereerde code kan hier niet goed mee omgaan en genereerd geen indicatorOvernameIsSpecified property, dus komt de indicatorOvername niet in het bericht en is het bericht dus nooit geldig volgens de XSD.
Hier is omheen te werken, handmatig die property toevoegen, of de default uit de ParametersKennisgeving.indicatorOvername halen.


Een groter probleem zit in de ZAKkennisgeving. Hier moet een isVan meegegeven worden, van het type ZAKZKTkennisgeving. Als volgt gedefinieerd in de XSD:


<complexType name="ZAKZKT-basis">
<annotation>
<appinfo>
<historieMaterieel>J</historieMaterieel>
<historieFormeel>J</historieFormeel>
</appinfo>
<documentation>Relatie naar het zaaktype van een zaak</documentation>
</annotation>
<sequence>
<element name="gerelateerde" type="ZKN:ZKT-basis" nillable="true" minOccurs="0"/>
<element ref="StUF:extraElementen" minOccurs="0"/>
</sequence>
<attribute ref="StUF:entiteittype" fixed="ZAKZKT"/>
<attributeGroup ref="StUF:relatie"/>
</complexType>
<complexType name="ZAKZKT-kennisgeving">
<annotation>
<documentation>In de gerelateerde is alleen verwerkingssoort I toegestaan</documentation>
</annotation>
<complexContent>
<restriction base="ZKN:ZAKZKT-basis">
<sequence>
<element name="gerelateerde" type="ZKN:ZKT-kerngegevensKennisgeving" nillable="true"/>
<element ref="StUF:extraElementen" minOccurs="0"/>
</sequence>
<attribute ref="StUF:entiteittype" use="required" fixed="ZAKZKT"/>
<attribute ref="StUF:scope" use="prohibited"/>
<attribute ref="StUF:verwerkingssoort" use="required"/>
</restriction>
</complexContent>
</complexType>
  
Het probleem hier is dat in de c# klasse ZAKZKTkennisgeving het attribuut verwerkingssoort niet wordt gegenereerd, ondanks dat in de XSD duidelijk staat dat deze verplicht is.
De enige oplossing hier is om het attribuut handmatig toe te voegen aan de c# klasse. Echter zodra dat is gedaan onstaat het volgende probleem, niet verwachte kolommen blijven in het gegenereerde bericht verschijnen.
De klasse ZKT-kerngegevensKennisgeving is als volgt gedefinieerd in de XSD:


<complexType name="ZKT-basis">
    <annotation>
      <documentation>Zaaktype</documentation>
    </annotation>
    <sequence>
      <element minOccurs="0" name="omschrijving" nillable="true" type="ZKN:Omschrijving-e" />
      <element minOccurs="0" name="code" nillable="true" type="ZKN:Code-e" />
      <element minOccurs="0" name="omschrijvingGeneriek" nillable="true" type="ZKN:Omschrijving-e" />
      <element minOccurs="0" name="zaakcategorie" nillable="true" type="ZKN:ZaakCategorie-e" />
      <element minOccurs="0" maxOccurs="unbounded" name="trefwoord" nillable="true" type="ZKN:Trefwoord-e" />
      <element minOccurs="0" name="doorlooptijd" nillable="true" type="ZKN:Doorlooptijd-e" />
      <element minOccurs="0" name="servicenorm" nillable="true" type="ZKN:Doorlooptijd-e" />
      <element minOccurs="0" name="archiefcode" nillable="true" type="ZKN:Archiefcode-e" />
      <element minOccurs="0" name="vertrouwelijkAanduiding" nillable="true" type="ZKN:VertrouwelijkAanduiding-e" />
      <element minOccurs="0" name="publicatieIndicatie" nillable="true" type="BG:Indicatie-e" />
      <element minOccurs="0" name="publicatietekst" nillable="true" type="ZKN:Toelichting-e" />
      <element minOccurs="0" name="ingangsdatumObject" nillable="true" type="StUF:DatumMetIndicator" />
      <element minOccurs="0" name="einddatumObject" nillable="true" type="StUF:DatumMetIndicator" />
      <element minOccurs="0" ref="StUF:extraElementen" />
      <element minOccurs="0" maxOccurs="unbounded" name="heeftVerantwoordelijkeMDW" nillable="true" type="ZKN:ZKTMDW-basis" />
      <element minOccurs="0" maxOccurs="unbounded" name="heeftVerantwoordelijkeOEH" nillable="true" type="ZKN:ZKTOEH-basis" />
      <element minOccurs="0" maxOccurs="unbounded" name="heeft" nillable="true" type="ZKN:ZKTSTT-basis" />
    </sequence>
    <attribute fixed="ZKT" ref="StUF:entiteittype" />
    <attributeGroup ref="StUF:entiteit" />
  </complexType>
<complexType name="ZKT-kerngegevensKennisgeving">
  <complexContent mixed="false">
    <restriction base="ZKN:ZKT-basis">
      <sequence>
        <element minOccurs="0" name="omschrijving" nillable="true" type="ZKN:Omschrijving-e" />
        <element minOccurs="0" name="code" nillable="true" type="ZKN:Code-e" />
        <element minOccurs="0" name="ingangsdatumObject" nillable="true" type="StUF:DatumMetIndicator" />
      </sequence>
      <attribute fixed="ZKT" ref="StUF:entiteittype" use="required" />
      <attribute ref="StUF:noValue" use="prohibited" />
      <attribute ref="StUF:scope" use="prohibited" />
      <attribute ref="StUF:verwerkingssoort" use="required" />
    </restriction>
  </complexContent>
  
  Het basistype heeft dus veel meer attributen en die blijven allemaal in het bericht komen als je een ZKT-kerngegevensKennisgeving object maakt. Dat keurt de XSD dan weer af. Zo blijven we van probleem naar probleem gaan.
  
  Nu is de vraag of er hier ervaringsdeskundigen zijn die succesvol de Zaak- en Documentservices hebben geïmplementeerd in C#.Net?
  Doen wij iets fout bij het genereren van de code of het gebruik ervan?
  
  Alle hulp is welkom.

Michiel Verhoef

Er zijn in het verleden al meer posts geplaatst mbt. het genereren van code en met name over de problemen die .Net hierbij ondervindt. Zie ook https://vng-realisatie.github.io/StUF-Standaarden/zoeken/genereren

Om op je eerste vraag terug te komen: zo te zien klopt jullie code niet. In een creeerZaak bericht is het groepselement parameters met de onderliggende elementen mutatiesoort en indicatorOvername verplicht. Het is niet nodig om te kijken naar de complexTypes waar het complexType ParametersLk01 van afgeleid is. Jullie code zou dat dus ook niet moeten doen.

Voor wat betreft het zaaktype (ZKT): in je voorbeeld verwijs je niet naar ZKT-kerngegevens maar naar ZKT-basis.  Het complexType voor de zaaktype kerngegevens is als volgt in de ZDS 1.1 schema's:

<complexType name="ZKT-kerngegevensKennisgeving">
        <complexContent>
            <restriction base="ZKN:ZKT-basis">
                <sequence>
                    <element name="omschrijving" type="ZKN:Omschrijving-e" nillable="true" minOccurs="0"/>
                    <element name="code" type="ZKN:Code-e" nillable="true" minOccurs="0"/>
                    <element name="ingangsdatumObject" type="StUF:DatumMetIndicator" nillable="true" minOccurs="0"/>
                </sequence>
                <attribute ref="StUF:entiteittype" use="required" fixed="ZKT"/>
                <attribute ref="StUF:noValue" use="prohibited"/>
                <attribute ref="StUF:scope" use="prohibited"/>
                <attribute ref="StUF:verwerkingssoort" use="required"/>
            </restriction>
        </complexContent>
    </complexType>

Als .Net al elementen toe zou voegen zou ik hooguit het element ingangsdatumObject verwachten, niet meer.

Wat zou kunnen helpen is met de XSD Resolver de schema's platslaan en de code opnieuw genereren.