2

在 AX 2012 中,我们曾经使用以下类通过编码轻松创建产品和产品主控:

 ecoresProductService  = EcoResProductService::construct();
 ecoResEcoResProduct   = new EcoResEcoResProduct();
 distintMaster         = new EcoResEcoResProduct_Product_Distinct();

这些类在 AX 365 中不存在。我需要通过编码创建已发布的产品。如果您知道如何创建,请分享。提前致谢。

4

2 回答 2

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;

我希望它可以帮助你

于 2017-04-20T16:40:05.867 回答
0

感谢 Il Vic,此解决方案非常适合创建已发布的产品。我首先尝试过,但发现“EcoResProductEntityToCrossTableDataAdaptor”已经实现了一个接口“EcoResIProductCrossTableData”。如果我们通过“EcoResProductEntityToCrossTableDataAdaptor”类的实现,我们会发现很多重要的parm方法不允许被调用。该方法被实现为抛出错误。所以只剩下一个选择,自己实现接口“EcoResIProductCrossTableData”。我做了并且工作得像个魅力。

于 2017-04-29T11:00:58.693 回答