AX 365 создать продукт с кодом x++
В AX 2012 мы легко создавали Product и Product master с помощью кодирования, используя такие классы, как:
ecoresProductService = EcoResProductService::construct();
ecoResEcoResProduct = new EcoResEcoResProduct();
distintMaster = new EcoResEcoResProduct_Product_Distinct();
Эти классы не существуют в AX 365. Мне нужно создать выпущенный продукт через кодирование. Пожалуйста, поделитесь, если вы знаете, как создать. Заранее спасибо.
2 ответа
Я предполагаю, что с AX 2012 легче создавать и выпускать продукт с использованием кода X++, но можно получить тот же результат с AX7 (или динамикой 365, если вы предпочитаете).
Идея состоит в том, чтобы использовать объект данных продукта (т.е. EcoResProductEntity
) и некоторые стандартные классы с длинными именами.
Вот код:
EcoResProductEntity ecoResProductEntity;
EcoResProductEntityToCrossTableDataAdaptor adaptor;
EcoResProduct product;
NumberSequenceReference numberSequenceReference = EcoResProductParameters::numRefProductNumber();
NumberSequenceTable numberSequenceTable = numberSequenceReference.numberSequenceTable();
Args args;
NumberSeq numberSeq = NumberSeq::newGetNumFromId(numberSequenceTable.RecId);
EcoResProductReleaseSessionManager productReleaseSessionManager;
EcoResReleaseSessionRecId releaseSessionRecId;
CompanyInfo companyInfo = CompanyInfo::find();
ecoResProductEntity.ProductNumber = numberSeq.num();
ecoResProductEntity.ProductSearchName = "myItem";
ecoResProductEntity.ProductName = "My Item";
ecoResProductEntity.ProductType = EcoResProductType::Item;
ecoResProductEntity.ProductSubType = EcoResProductSubtype::ProductMaster;
ecoResProductEntity.VariantConfigurationTechnology = EcoResVariantConfigurationTechnologyType::PredefinedVariants;
ecoResProductEntity.ProductDimensionGroupName = "Prod_Dim";
// here you can set all the fields of the data entity that you need
adaptor = EcoResProductEntityToCrossTableDataAdaptor::newFromEntity(ecoResProductEntity);
ttsbegin;
product = EcoResProductCrossTableManager::makeProductRecord(adaptor);
EcoResProductCrossTableManager::insert(adaptor, product);
// here you can create one or more translations
EcoResProductTranslation::createOrUpdateTranslation(product.RecId, "it translation", '', "it");
// now we want to release that master product for the current company
productReleaseSessionManager = EcoResProductReleaseSessionManager::newReleaseSession();
releaseSessionRecId = productReleaseSessionManager.parmReleaseSessionRecId();
productReleaseSessionManager.addProduct(product.RecId);
productReleaseSessionManager.addLegalEntityForProduct(companyInfo.RecId, product.RecId);
args = new Args(formStr(EcoResProductRelease));
args.record(EcoResReleaseSession::find(releaseSessionRecId));
// the first boolean parameter is for showing a log for errors
// the second boolean parameter is for executing the release with a batch
if (EcoResProductReleaseSessionBatch::runJob(args, true, false))
{
productReleaseSessionManager.cleanUp();
}
ttscommit;
Я надеюсь, что это может помочь вам
Благодаря Il Vic это решение идеально подходит для создания выпущенного продукта. Сначала я попробовал это, но обнаружил, что "EcoResProductEntityToCrossTableDataAdaptor" реализовал интерфейс "EcoResIProductCrossTableData". Если мы пройдем реализацию класса "EcoResProductEntityToCrossTableDataAdaptor", то обнаружим, что многие важные методы parm не могут быть вызваны. Метод реализован для выдачи ошибок. Так что остается только один выбор, реализовать интерфейс "EcoResIProductCrossTableData" самостоятельно. Я сделал и работал как шарм.