2015-10-12 3 views
0

Я работаю вокруг файлообменной (экспорт) с использованием Data Import Export Framework (DIXF), я хочу, чтобы добавить метод генерации, чтобы найти LineAmount Purchline, связанный с приемной линией VendPackingSlipTrans от PurchLine table.I создания следующий сценарий, но мне нужна помощь:DMF/DIXF AX 2012 R3 Пользовательские генерировать метод

[DMFTargetTransformationAttribute(true),DMFTargetTransformationDescAttribute("Function that generate LineAmount"), 
DMFTargetTransformationSequenceAttribute(11), 
DMFTargetTransFieldListAttribute([fieldStr(DMFVendPackingSlipTransEntity,LineAmount)]) 
] 
public container GenerateLineAmount(boolean _stagingToTarget = true) 
{ 

    container     res; 
    PurchLine     purchLine; 
    VendPackingSlipTrans  vendPackingSlipTrans; 

    if (_stagingToTarget) 
    { 
     select firstOnly purchLine 
      where purchLine.LineAmount     == entity.LineAmount && 
        vendPackingSlipTrans.OrigPurchid  == purchLine.PurchId && 
        vendPackingSlipTrans.PurchaseLineLineNumber == purchLine.LineNumber; 

     if (! purchLine) 
     { 
      entity.LineAmount = purchLine.LineAmount ; 
      entity.insert(); 
     } 
    } 
    res = [entity.LineAmount]; 
    return res; 
} 

Я должен экспортировать данные из топора в файл с помощью DMF, поэтому для этого у меня есть какое-то поле существующего в VendPackingSlipTrans так добавил эти поля в промежуточной таблице, но другие областях существуют в другую таблицу, такую ​​как LineAmount.I не знаю, как добавить эти другие поля в промежуточную таблицу. для этого в myEnityclass я создаю метод generat для связывания поля в исходной таблице. к промежуточному столу

+0

Какой помощи вам нужна? –

+0

«Как связать линии получения продуктов поставщика (VendPackingSlipTrans) с линиями покупок (BuyLine)?» ... Это вопрос? –

+0

Операция select и следующая логика для установки поля 'LineAmount' не имеет никакого смысла. Как это написано в настоящее время, 'LineAmount' всегда будет равен нулю, потому что оператор select будет извлекать запись' BuyLine' с пустым 'BuyId' и' LineNumber' равным нулю (потому что переменная 'vendPackingSlipTrans' никогда не создается экземпляром), и если у вас есть поврежденные данные, поэтому запись 'BuyLine' не должна существовать. Также не имеет смысла вызывать 'entity.insert()' в этом методе. Методы «Создать» используются для установки одного поля записи сущности, а не для вставки записи сущности. –

ответ

2

Таким образом, вы хотите экспортировать VendPackingSlipTrans записей с дополнительной информацией из PurchLine записей с использованием настраиваемой сущности импорта/экспорта данных (Framework DIXF). Если это верно, то есть несколько проблем в вашей реализации:

  1. логика в if (_stagingToTarget) отрасли: поскольку структура может быть использована как для импорта и экспорта, _stagingToTarget используется, чтобы различать между ними. Если _stagingToTarget - true, данные импортируются из промежуточной таблицы в целевую таблицу Dynamics AX. Поэтому вам нужно поставить логику в ветку else.
  2. Выбор записи PurchLine: текущая реализация никогда не будет выбирать запись PurchLine, так как значения неизмененной таблицы таблицы VendPackingSlipTrans используются в качестве критериев в инструкции select. Также выбранные критерии неверны, посмотрите на метод purchLine таблицы VendPackingSlipTrans, чтобы узнать, как получить запись PurchLine для записи VendPackingSlipTrans и использовать переменную target для создания переменной таблицы VendPackingSlipTrans.
  3. check if (! purchLine): Эта проверка означает, что если запись NO PurchLine может быть найдена с предыдущим оператором select, LineAmount этой пустой записи будет использоваться для промежуточной записи. Это неправильно, вместо этого вы хотите использовать LineAmount записи, которая была найдена.
  4. entity.insert(): как я уже упоминал в комментариях, запись объекта не должна вставляться в метод генерации; рамки позаботятся вставка

Возможного исправления этих проблем могут выглядеть следующим образом:

[ 
    DMFTargetTransformationAttribute(true), 
    DMFTargetTransformationDescAttribute('function that determines LineAmount for export'), 
    DMFTargetTransformationSequenceAttribute(11), 
    DMFTargetTransFieldListAttribute([fieldStr(DMFVendPackingSlipTransEntity, LineAmount)]) 
] 
public container GenerateLineAmount(boolean _stagingToTarget = true) 
{ 
    container     res; 
    PurchLine     purchLine; 
    VendPackingSlipTrans  vendPackingSlipTrans; 

    if (_stagingToTarget) 
    { 
     // this will be executed during import 
     res = [0.0]; 
    } 
    else 
    { 
     // this will be executed during export 
     // the target variable contains the VendPackingSlipTrans that is exported 
     vendPackingSlipTrans = target; 
     purchLine = vendPackingSlipTrans.purchLine(); 
     if (purchLine) 
     { 
      res = [purchLine.LineAmount]; 
     } 
    } 
    return res; 
} 
+0

Спасибо, что ты лучший, твоя экспликация поможет мне узнать новые вещи – Astoner

+0

Я получаю следующую ошибку, когда пытаюсь проверить мой экспорт, создав новые объекты-объекты в Data import export framword> Объекты-объекты: 'Ошибка выполнения кода: DMFVendPackingSlipTransClass у объекта нет метода getFieldsSequence' Я хочу ответить на новый вопрос, но я достиг предела моего вопроса, извините за это – Astoner

+0

@Astoner: посмотрите, как реализуют этот класс другие классы объектов DIXF, например 'DMFPurchLineEntityClass'. Это должно дать вам представление о том, как вы можете реализовать метод в своем собственном «DMFVendPackingSlipTransClass». –

 Смежные вопросы

  • Нет связанных вопросов^_^