Зачем вот чего-то править в AgreementClassificationKey?.. Ошибка возникает, скорее всего, на разборе ключа замены: AIF видит в соотв. индексе два поля, а в XML значение только для одного из них. Какие при этом значения по умолчанию будут у параметрических методов AgreementClassificationKey, никак не влияет на то, что в XML-документе отсутствует ожидаемое значение. Поле AgreementClassification.AgreementRelationType помечено как невидимое, поэтому тот же обозреватель таблиц его не показывает, но в базе оно есть и входит в ключ замены для таблицы, поэтому AIF ожидает его значение на ряду с Name, иначе он не сможет однозначно идентифицировать запись в AgreementClassification. Попробуйте передавать привязку к классификации договоров так:
PHP код:
<SalesAgreementHeaderT class="entity">
<AgreementClassification>
<Name xmlns="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes">B2B</Name>
<AgreementRelationType xmlns="http://schemas.microsoft.com/dynamics/2008/01/sharedtypes">4903</AgreementRelationType>
</AgreementClassification>