WHAT'S NEW


Changes in XSD files that are part of the FIFA Data Standard caused the breaking changes in the SDK. The breaking changes are described in the detailed changelog section below.


The following changes have been made in the latest release:

  • Breaking changes
    1. DomesticTransferDeclaration class changes
    2. ProofOfPayment class changes
    3. ConditionalTransferFeeType, ReleaseBuyoutFeeType and FixedTransferFeeType class changes
  • Other changes and improvements
    1. XML validation enhancements



REASON OF CHANGES

 

To fix several issues that we are observing on cross-platform requests related to serialization and deserialization of messages, and to model the data in a way it will be easier to change or extend the messages without breaking the SDK contract.



WHO IS AFFECTED


Every Member Association that exchanges messages with the Clearing House through the TMS system. In other words, every MA that uses TMSFacade. In particular: DeclareDomesticTransferAndWaitForTransferId, ProvePaymentAndWaitForPaymentId methods.



DETAILED CHANGELOG:


  1. DomesticTransferDeclaration class changes (breaking change)


DomesticTransferDeclaration no longer contains collections List<TransferFee> ReleaseBuyoutFee and List<TransferFee> FixedTransferFee. Instead it contains List<FixedTransferFee> ReleaseBuyoutFee and List<FixedTransferFee> FixedTransferFee.


Before the change

After the change

    public class DomesticTransferDeclaration

    {

        ...

        public List<TransferFee> FixedTransferFee = new List<TransferFee>();


 

        public List<ConditionalTransferFee> ConditionalTransferFee = new List<ConditionalTransferFee>();


 

        public List<TransferFee> ReleaseBuyoutFee = new List<TransferFee>();

        ...

    }

    public class DomesticTransferDeclaration

    {

        ...

        public List<FixedTransferFee> FixedTransferFee = new List<TransferFee>();


 

        public List<ConditionalTransferFee> ConditionalTransferFee = new List<ConditionalTransferFee>();


 

        public List<ReleaseBuyoutFee> ReleaseBuyoutFee = new List<TransferFee>();

        ...


 

    }



  1. ProofOfPayment class changes (breaking change)


ProofOfPayment no longer contain Fee of typeTransferFee. Instead it contains: PaymentDetails (of type PaymentDetails) and RecipientClub (of type ClubType).


Before the change

After the change

    public class ProofOfPayment

    {

        ...


 

        public TransferFee Fee { get; set; }


 

        ...

        

        public ProofOfPayment(PaymentType paymentType, long tmsTransferId, TransferFee fee)

        {

            ...

        }


 

        ...

    }

    public class ProofOfPayment : IValidatable

    {

        ...

        public PaymentDetails PaymentDetails { get; set; }


 

        public Club RecipientClub { get; set; }


 

        ...


 

        public ProofOfPayment(PaymentType paymentType, long tmsTransferId, PaymentDetails details, Club recipientClub)

        {

            ...

        }

    }



  1. ConditionalTransferFeeType, ReleaseBuyoutFeeType and FixedTransferFeeType class changes (breaking change)

 

ConditionalTransferFee has been unified with ReleaseBuyoutFee and FixedTransferFee and it doesn't inherit from TransferFee anymore. TransferFee has been deleted. You should use one of the types ConditionalTransferFee, ReleaseBuyoutFee, or FixedTransferFee instead of it. The details of the transfer are now encapsulated in the new type TransferFeeDetails.


Before the change

After the change

    public class ConditionalTransferFee : TransferFee

    {

        public string Condition { get; set; }


 

        ...


 

        public ConditionalTransferFee(decimal amount, ISO4217CurrencyCode currency, DateTime dateOfPayment, Club recipientClub) : base(amount, currency, dateOfPayment, recipientClub)

        {

        }

    }


 

    public class ConditionalTransferFee

    {

        public string Condition { get; set; }

        public TransferFeeDetails FeeDetails { get; set; }


 

        ...


 

        public ConditionalTransferFee(TransferFeeDetails feeDetails)

        {

            ...

        }

        public TransferFeeDetails FeeDetails { get; set; }

    }

    public class FixedTransferFee

    {

        protected FixedTransferFee() { }


 

        public FixedTransferFee(TransferFeeDetails feeDetails)

        {

            this.FeeDetails = feeDetails;

        }

        public TransferFeeDetails FeeDetails { get; set; }

    }


 

    public class ReleaseBuyoutFee

    {

        protected ReleaseBuyoutFee() { }


 

        public ReleaseBuyoutFee(TransferFeeDetails feeDetails)

        {

            this.FeeDetails = feeDetails;

        }

        public TransferFeeDetails FeeDetails { get; set; }

    }



  1. XML validation enhancements (non-breaking change)  


XML validation of methods that are exposed through TMSFacade is performed not only on the serialization but also deserialization of the message. It will provide more insightful logs when receiving an invalid message via the Service Bus.


XmlDeserializationException is thrown in case of a deserialization error.



DOWNLOAD


To get the newest version go to: https://support.id.ma.services/support/solutions/articles/7000016085--net-sdk-6-x-x.