Fasil Hayat's blog

...C#, .Net, Sharepoint, BizTalk, JQuery...

Efter flere timers kamp med følgende fejl, fandt jeg endelig roden til problemet.

If ref is present, all of <complexType>, <simpleType>, <key>, <keyref>, <unique>, nillable, default, fixed, form, block, and type must be absent.


Umiddelbart kan der være flere muligheder. Hvad fejlbeskrivelsen ret banalt hentyder til, er lige nøjagtigt det, der er problemet. I første omgang lyder det som en ret kryptisk fejl, som jeg ganske enkelt heller aldrig har set før.
I dette tilfælde var det nemlig ulovlig brug af 'Nillable' i en 'ref, der viste sig at være problemet. Dog kunne man ikke helt se hvor fejlen lå, da der var en del nestede schemaer med reference ('ref's).

<xs:element ref="ent:Entitet" nillable="true" minOccurs="0"/>

rettet til:

<xs:element ref="ent:Entitet" minOccurs="0"/>

Et par timers kamp og man er lige pludselig blevet en smule klogere på xml schemaer.



Tilbage i Februar 2011 var jeg involveret i mit første Biztalk 2010 projekt. Denne orkestrering viser parallelle aktiviteter, der kalder andre delorkestreringer, decide shapes samt 'try - catch' shapes i orkestreringen.

Til orkesteringen hører der desuden en transform shape, der transformerer beskeder i en anden struktur. Til dette formål blev mapping brugt, som man kan se et udsnit af forneden.

Inden længe kommer der et indlæg om, hvordan man begiver sig rundt indenfor Biztalk 2010. Tips og tricks på hvordan de forskellige shapes, pipelines og mappings kan anvendes.



Nøgleordet ved udvikling af Biztalk orkestreringer og mappings er overblik. Der stilles rigtige mange store krav til xml skemaerne, og det kan være et helvede at ryge ned i, hvis man ikke har sørget for skemaernes design er gennemtænkt. Man mapper data ved hjælp af skemaer, og man kan hurtigt komme ud for, at et felt kan holde en null værdi, men det felt man mapper over i kræver feltet udfyldt eller værdien sat lig med null. Man kan nemt ændre feltets design til at kunne holde på null værdier, men mapper man et element felt over i en attribut type, har man desværre ikke mange muligheder, for at angive denne nullable egenskab.

Tricket er her at bruge et script functoid, hvori man undertrykker feltet. Dvs. man explicit fortæller at attributten kun skal være synlig, hvis der er en værdi. Ellers skal den slet ikke vises.
Denne funktionalitet opnår man ved at hive 'script' functoid typen over i mappet.

Script Functoid

Dobbelt klik på 'script' functoid ikonet, og vælge 'Script Functoid Configuration'. Herinde vælger man så  'Inline XSLT Call Template'.

Inline Xslt Call Template

Herinde skriver man følgende XSLT kode:

<xsl:template name="VisIkkeAttribut">
  <xsl:param name="param1">
  <xsl:if test="$param1 != '' ">
    <xsl:attribute name="NavnPaaMitMappedeFelt">
     <xsl:value-of select="$param1"/>
    </xsl:attribute>
  </xsl:if>
</xsl:template>


Map herefter element feltet over i attribut feltet. Attribut værdien vil kun blive vist, hvis der findes en værdi, ellers vil attributten ikke være synlig.



Fasil Malik Hayat

Developer
.Net, WCF, Sharepoint, MOSS, Biztalk, JQuery.

linkedin facebook twitter plaxo google+ grooveshark boxee
fasil

Education

fasil

Bachelor of Science (Honours)
De Montfort University, Leicester.

Fag: Java, MVC, Information Strategy, ITIL

Microsoft Certified Technology Specialist

Skills

.net vs2010 - C# sharepoint sql server jquery ubuntu java netbeans


  

Sign in